home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 422_02 / misc / ptr2func.c < prev    next >
C/C++ Source or Header  |  1994-03-20  |  2KB  |  53 lines

  1. /*
  2.  * Example program demonstrating calling functions indirectly through
  3.  * a table of pointers.
  4.  *
  5.  * Although MICRO-C does not have a pointer-to-function data type, it does
  6.  * allow you to call indirectly through any other type of pointer, thereby
  7.  * providing the functionality of pointers-to-functions.
  8.  *
  9.  * Compile command: cc ptr2func -fop
  10.  */
  11. #include <stdio.h>
  12.  
  13. /* DEMO functions to place in table (defined BEFORE table) */
  14. char *func0() {    return "Zero";  }
  15. char *func1() {    return "One";   }
  16. char *func2() { return "Two";   }
  17. char *func3() { return "Three"; }
  18. char *func4() { return "Four";  }
  19. char *func5() { return "Five";  }
  20. char *func6() { return "Six";   }
  21. char *func7() { return "Seven"; }
  22. char *func8() { return "Eight"; }
  23. char *func9() { return "Nine";  }
  24.  
  25. /*
  26. Note that in order to initialize a variable with the address of
  27. a symbol, that symbol must be already defined. If you wish to
  28. use functions (or variables) which are defined further down in
  29. the source file, you can use "extern" to define and prototype
  30. the symbol in advance.
  31. */
  32. extern char *func10();
  33.  
  34. /*
  35. Table of pointers to functions. Note that one level of indirection
  36. is used to access the function. Therefore, if we want functions which
  37. return pointers-to-char (char *), we have to declare the table as
  38. pointers-to-pointers-to-char (char **)
  39. */
  40. char **func_table[] = { &func0, &func1, &func2, &func3,
  41.     &func4, &func5, &func6, &func7, &func8, &func9, &func10 };
  42.  
  43. /* Simple program to loop, calling each function from table */
  44. main()
  45. {
  46.     int i;
  47.     for(i=0; i < sizeof(func_table)/sizeof(char **); ++i)
  48.         printf("func%u() = '%s'\n", i, (*func_table[i])() );
  49. }
  50.  
  51. /* Example of function defined AFTER table */
  52. char *func10() { return "Last function in table"; }
  53.